package ProjectoX;

import java.awt.Rectangle;

public class Goomba extends Enemigo{
	
	protected static final int ENEMY_SPEED = 3;
	private boolean enTierra;
	protected String [] NombresSpriteMov;
	protected String [] NombresSpriteMovIz;
	final protected int AltoIm = 43;
	final protected int AnchoIm = 43;
	final protected int AltoC = 50; //BORRAR DSP!
	final protected int AnchoC = 50;
	private boolean puedeatacar = true;
	
	public Goomba(Nivel nivel, Posicion pos) {
		super(nivel);
		NombresSpriteMov = new String [] {"Goomba/goomba1.png", "Goomba/goomba2.png", "Goomba/goomba3.png"};
		NombresSpriteMovIz = new String [] {"Goomba/goomba1_iz.png", "Goomba/goomba2_iz.png", "Goomba/goomba3_iz.png"};
		Pos = pos;
		enTierra = true;
		GetMov().setMovHorizontal(-ENEMY_SPEED);
		GetMov().setMovVertical(ENEMY_SPEED);
		setSpriteName(NombresSpriteMovIz);
		setFrameSpeed(35);
	}
	
	public void colision (Enemigo E) {
		Mov.setMovHorizontal(-Mov.getVelX());
		Pos.setX(Pos.getX()+Mov.getVelX());
		if (getNombresSprite()[0]=="Goomba/goomba1.png")
			setSpriteName(NombresSpriteMovIz);
		else
			setSpriteName(NombresSpriteMov);
	}
	
	public void colision (Componente C) {
		Rectangle r1 = C.getBounds();
		Rectangle Area = r1.intersection(this.getBounds());
		if ((Area.getHeight()<=8)) {
			if ((Area.getWidth()>8)) {
			if (Area.getY()<C.getPos().getY()+30){
				if (Mov.getVelY()>0)
					detenerSalto(C);
				}
			else invertirSalto();
		}}
		else {
			if (Area.getX()<C.getPos().getX()+30){
				Pos.setX(C.getPos().getX()-AnchoIm);
				GetMov().setMovHorizontal(-ENEMY_SPEED);
				setSpriteName(NombresSpriteMovIz);
			}				
			else {
				Pos.setX(C.getPos().getX()+AnchoC+1);
				GetMov().setMovHorizontal(ENEMY_SPEED);
				setSpriteName(NombresSpriteMov);
			}				
		}
	}
	
	private void invertirSalto() {
		GetMov().setMovVertical(ENEMY_SPEED);	
	}
	
	private void detenerSalto(Componente C) {
		Pos.setY(C.getPos().getY()-AltoIm+1);
		enTierra= true;
		GetMov().setMovVertical(0);
	}
	
	public void actuar() {
		super.actuar();
		Pos.setX(Pos.getX()+GetMov().getVelX());
		Pos.setY(Pos.getY()+GetMov().getVelY());
		if (enTierra)
			GetMov().setMovVertical(ENEMY_SPEED);
		enTierra = false;
		if (Pos.getY()>800) {
			remove();
		}
			
	}
	
	public void remove() {
		super.remove();
		miNivel.incrementarPuntaje(60);
	}
	
	public void morir() {
		remove();
	}


	public void colision(Mario M) {
	if (puedeatacar) {
		new Reminder(1,this);
		puedeatacar = false;
		if (M.esInvencible()) {
			M.matar(this);
		} else {
			if ((getPos().getY()-M.getPos().getY())>14) {
				M.matar(this);
			}
			else {
				M.remove();
				miNivel.incrementarPuntaje(-30);
			}	
		}		
	}
	}
	
	public void colision(MarioGrande M) {
	if (puedeatacar) {
		puedeatacar = false;
		if (M.esInvencible()) {
			M.matar(this);
			new Reminder(1,this);
		} else {
		if ((getPos().getY()-M.getPos().getY()-19)>14) {
			M.matar(this);
			new Reminder(1,this);
		}
		else
			miNivel.deboDesCrecer();
			new Reminder(5,this);
		}
	}
	}
	
	public void colision(MarioDisparo M) {
	if (puedeatacar) {
		puedeatacar = false;
		if (M.esInvencible()) {
			new Reminder(1,this);
			M.matar(this);
		} else {
		if ((getPos().getY()-M.getPos().getY()-19)>14) {
			new Reminder(1,this);
			M.matar(this);
		}
		else {
			new Reminder(5,this);
			miNivel.deboDesDisparar();
		}
		}
	}
	}
	
	public void puedeatacar() {
		puedeatacar = true;
	}

}
